/*******************************************************
> Copyright (C) 2024 ==IOT== All rights reserved.
> File Name: fun_template.cpp
> Author: IOT
> Website:www.slq.org
> Created Time: 2024年10月28日 星期一 14时39分53秒
***************************************************/

#include <iostream>
#include <ctime>

using namespace std;

// 定义(求两个对象的较大值)函数模板
template <typename T>
T getMax(T &a, T &b)
{
	return a > b ? a : b;
}

template <typename T>    // 函数模板重载
T getMax(T &a, T &b, T &c)
{
	return (a > b ? a : b) > c ? (a > b ? a : b) : c;
}

// 定义(交换两个对象的值)函数模板
template <class arg>
void mySwap(arg &a, arg &b)
{
	arg temp; // 定义临时变量，用于对象交换
	temp = a;
	a = b;
	b = temp;
}

template <class T>
bool mycmp(T& a, T& b)
{
	return  a > b;
}

//定义函数模板,实现对于不同类型的数组进行排序
template <class T>
void mySort(T *ptr, int len)
{
	int i,j;
	for (i = 0; i < len - 1; i++) {
		for (j = 0; j < len - 1 - i; j++) {
			if (ptr[j] > ptr[j + 1]) {
				mySwap(ptr[j], ptr[j + 1]);
			}
		}
	}
}

template <class T, class Comp>
void mySort(T *ptr, int len, Comp cmp)
{
	int i,j;
	for (i = 0; i < len - 1; i++) {
		for (j = 0; j < len - 1 - i; j++) {
			if (cmp(ptr[j], ptr[j + 1])) {
				mySwap(ptr[j], ptr[j + 1]);
			}
		}
	}
}

 
//这就是一个仿函数，是一个类，类内部封装了一个括号操作符重载
template<class T>
class Cmp
{
public:
	bool operator()(const T& x, const T& y)
	{
		return x > y;
	}
};


// 定义函数模板，实现在不同类型的数组中查找元素是不是存在。
//myFind()

// 打印数组
template <class T>
void print_array(T *ptr, int len)
{
	for (int i = 0;i < len; i++) {
		cout << " " << ptr[i];
	}
	cout << endl;
}

// 数组赋值
template <class T>
void assign_array(T *ptr, int len)
{
	for (int i = 0;i < len; i++) {
		ptr[i] = random() % 1000 * 0.1;
	}
}

